﻿using System;
using System.Data;
using System.Web.UI.WebControls;
using ConsultasDeDeguridad;

public partial class Seguridad_PerfilesDeUsuario : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CargarTablaPermios();
    }

    private void CargarTablaPermios()
    {
        DataTable dtRoles = new CCPerfilesDeUsuario().SelectRoles();
        DataTable dtPermisosRoles = new CCPerfilesDeUsuario().SelectPermisosRoles();
            
        tblPermisosPerfiles.Rows.Clear();

        //HEADER
        tblPermisosPerfiles.Rows.Add(new TableRow());
        tblPermisosPerfiles.Rows[0].TableSection = TableRowSection.TableHeader;

        TableHeaderCell thc1 = new TableHeaderCell();
        thc1.Text = "Módulos";
        thc1.CssClass = "EsquinaIzqSup";
        tblPermisosPerfiles.Rows[0].Cells.Add(thc1);

        foreach (DataRow row in dtRoles.Rows)
        {
            TableHeaderCell thc = new TableHeaderCell();
            thc.Text = row["Nombre"].ToString();
            thc.ColumnSpan = 2;
            thc.CssClass = "NombresRoles";
            tblPermisosPerfiles.Rows[0].Cells.Add(thc);
        }

        tblPermisosPerfiles.Rows.Add(new TableRow());
        tblPermisosPerfiles.Rows[1].TableSection = TableRowSection.TableHeader;

        TableHeaderCell thc2 = new TableHeaderCell();
        thc2.Text = "&nbsp;";
        tblPermisosPerfiles.Rows[1].Cells.Add(thc2);

        for (int i = 0; i < dtRoles.Rows.Count; i++)
        {
            TableHeaderCell thc = new TableHeaderCell();
            thc.Text = "Leer";
            thc.CssClass = "Leer";
            tblPermisosPerfiles.Rows[1].Cells.Add(thc);

            TableHeaderCell thcE = new TableHeaderCell();
            thcE.Text = "Editar";
            thcE.CssClass = "Escribir";
            tblPermisosPerfiles.Rows[1].Cells.Add(thcE);
        }

        //DATOS
        DataTable dtPermisos = new CCPerfilesDeUsuario().SelectPermisos();

        foreach (DataRow rowPermiso in dtPermisos.Rows)
        {
            int rowIndex = tblPermisosPerfiles.Rows.Add(new TableRow());

            TableCell td1 = new TableCell();
            td1.Text = rowPermiso["NombrePermiso"].ToString();
            td1.CssClass = "NombrePermiso";
            tblPermisosPerfiles.Rows[rowIndex].Cells.Add(td1);

            foreach (DataRow rowRol in dtRoles.Rows)
            {
                TableCell td2 = new TableCell();
                CheckBox chkLeer = new CheckBox();
                chkLeer.ID = "chkLeer_" + rowPermiso["idPermiso"] + "_" + rowRol["IdRol"];
                chkLeer.Checked = VerValorPermiso(dtPermisosRoles, Convert.ToInt32(rowPermiso["idPermiso"]), Convert.ToInt32(rowRol["IdRol"]), true);
                td2.Controls.Add(chkLeer);
                td2.CssClass = "CheckLeer";
                tblPermisosPerfiles.Rows[rowIndex].Cells.Add(td2);

                TableCell td3 = new TableCell();
                CheckBox chkEscribir = new CheckBox();
                chkEscribir.ID = "chkEscribir_" + rowPermiso["idPermiso"] + "_" + rowRol["IdRol"];
                chkEscribir.Checked = VerValorPermiso(dtPermisosRoles, Convert.ToInt32(rowPermiso["idPermiso"]), Convert.ToInt32(rowRol["IdRol"]), false);
                td3.Controls.Add(chkEscribir);
                td3.CssClass = "CheckEscribir";
                tblPermisosPerfiles.Rows[rowIndex].Cells.Add(td3);
            }
        }
    }

    private static bool VerValorPermiso(DataTable dtPermisosRoles, int idPermiso, int idRol, bool leer)
    {
        DataRow[] filas = dtPermisosRoles.Select("idPermiso = " + idPermiso + " AND idRol = " + idRol);
        if (filas.Length > 0)
            return leer ? Convert.ToBoolean(filas[0]["Leer"]) : Convert.ToBoolean(filas[0]["Editar"]);

        return false;
    }

    protected void btnAceptar_OnClick(object sender, EventArgs e)
    {
        foreach (TableRow row in tblPermisosPerfiles.Rows)
        {
            foreach (TableCell cell in row.Cells)
            {
                foreach (WebControl control in cell.Controls)
                {
                    if(control is CheckBox)
                    {
                        string idCheck = control.ID.Split('_')[0];
                        int idPermiso = Convert.ToInt32(control.ID.Split('_')[1]);
                        int idRol = Convert.ToInt32(control.ID.Split('_')[2]);

                        new CCPerfilesDeUsuario().ActualizarPermisoRol(idPermiso, idRol, ((CheckBox)control).Checked, idCheck.Equals("chkLeer"));
                    }
                }
            }
        }
    }

    protected void btnCancelar_OnClick(object sender, EventArgs e)
    {
        //mandar a no se que página
    }
}